Workflow

Detailed software versions can be found under Rules.

Results

Workflow resultes
File Size Description Job properties
readme.rst 4.0 kB

Snakemake Build Status gitrepo snakemake report

snakemake minimal workflow

In Snakefile a set of rules are supplied on the basis of which output files are supposed to be produced by the workflow.

It is customary to start with rule all a blank rule that uses all final output files as input files. snakemake will go through the rest of the rules and create an execution sequence for all rules based on the first rule. It will also determine which steps can be executed in parallel.

Run in docker container

docker run -it --rm -v "$PWD":/app erblast/r_conda_snakemake_pkgs

Execute

snakemake

Dryrun

snakemake -n

Execute after code changes

snakemake -R `snakemake --list-code-changes`

Force re-execution

snakemake -F

Parallel Processing

snakemake --cores 3

Execute and build conda environment

The conda environment will be reconstructed from yml file and stored in ./.snakemake/conda. A single conda environment can be defined for each rule.

conda env export --name snakemake_minimal -f ./envs/snake_minimal_macos.yml
snakemake --use-conda

Bringing it all together

snakemake -R `snakemake --list-code-changes` --use-conda --cores 3

Visualize workflow

snakemake --dag | dot -Tpng > ./docs/wflow.png

image3

Build Report

snakemake --report docs/index.html

YAML configuration file

config.yml

Shell vs Scripts

Scripts in R and python have access to a snakemake object carrying all rule parameters as attributes. However when shell commands can be constructed snakemake’s parallel processing and logging capabilities can be leveraged.

R Scripts and Markdown

R scripts can be added as .R or as .Rmd. When they are added as .Rmd they can only produce one single html-output file. A workaround is to use an intermediate R script as shown in rule.

see rules ``plot_rmd_direct`` and ``plot_rmd_via_script`` inSnakefile

Python Scripts and Jupyter Notebooks

Python scripts can be added as .py files. We can use papermill to execute parametrized jupyter notebooks which we can then render as html. html is preferred to notebooks because there is no doubt about the execution state.

see rules ``plot_execute_nb`` and ``plot_nb_2_html``Snakefile

** the rules for rendering notebooks are not compatible with nb_conda as is.**

Testing

All common R functions are collected in an R package under utilR which is checked and tested

Benchmarking

Execution times of each rule are stored in ./benchmark. Can be defined in Snakefile

Logging

unfortunately logging is not supported for scripts thus needs to be setup for each script individually using script-language-specific tools. https://bitbucket.org/snakemake/snakemake/issues/917/enable-stdout-and-stderr-redirection

Job properties
Rulereadme
Workflow resultes
File Size Description Job properties
plot.html 1.3 MB
Job properties
Ruleplot_rmd_direct
plot2.html 1.3 MB
Job properties
Ruleplot_rmd_via_script
plot2.png 962.9 kB
Job properties
Ruleplot_rmd_via_script
plot3.html 296.5 kB
Job properties
Ruleplot_nb_2_html

Statistics

If the workflow has been executed in cluster/cloud, runtimes include the waiting time in the queue.

Configuration

Configuration files
File Code
config.yml
1
2
dataset:
  'iris'

Rules

Workflow rules
Rule Jobs Output Singularity Conda environment Code
plot_rmd_direct 1
  • docs/html/plot.html
source
plot_rmd_via_script 1
  • docs/html/plot2.html
  • png/plot2.png
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
wd = getwd()

debug_file = paste0('debug/', snakemake@rule, '.Rdata')
save.image(debug_file)

params= list()
params$input = snakemake@input[2:length(snakemake@input)]
params$output = snakemake@output[2:length(snakemake@output)]
params$config = snakemake@config
params$rule = snakemake@rule

output_file = paste0( getwd(),'/' , snakemake@output[[1]] )
output_file = normalizePath(output_file)

rmarkdown::render( snakemake@input[[1]]
                   , output_file = output_file
                   , params      = params
                   , knit_root_dir = getwd()
                   , envir = new.env()
)
plot_nb_2_html 1
  • docs/html/plot3.html
  • _libgcc_mutex=0.1=main
  • ansiwrap=0.8.4=py_0
  • arrow-cpp=0.13.0=py36h117bdfb_0
  • asn1crypto=1.2.0=py36_0
  • attrs=19.3.0=py_0
  • backcall=0.1.0=py36_0
  • backports=1.0=py_2
  • backports.tempfile=1.0=py_1
  • backports.weakref=1.0.post1=py_1
  • blas=1.0=mkl
  • bleach=3.1.0=py36_0
  • boost-cpp=1.67.0=h14c3975_4
  • brotli=1.0.7=he6710b0_0
  • bzip2=1.0.8=h7b6447c_0
  • ca-certificates=2019.11.28=hecc5488_0
  • certifi=2019.11.28=py36_0
  • cffi=1.13.2=py36h2e261b9_0
  • chardet=3.0.4=py36_1003
  • click=7.0=py36_0
  • cryptography=2.8=py36h1ba5d50_0
  • cycler=0.10.0=py36_0
  • dbus=1.13.12=h746ee38_0
  • decorator=4.4.1=py_0
  • defusedxml=0.6.0=py_0
  • double-conversion=3.1.5=he6710b0_1
  • entrypoints=0.3=py36_0
  • expat=2.2.6=he6710b0_0
  • feather-format=0.4.0=py_1003
  • fontconfig=2.13.0=h9420a91_0
  • freetype=2.9.1=h8a8886c_1
  • future=0.18.2=py36_0
  • gflags=2.2.2=he6710b0_0
  • glib=2.63.1=h5a9c865_0
  • glog=0.4.0=he6710b0_0
  • gmp=6.1.2=h6c8ec71_1
  • gst-plugins-base=1.14.0=hbbd80ab_1
  • gstreamer=1.14.0=hb453b48_1
  • icu=58.2=h9c2bf20_1
  • idna=2.8=py36_0
  • importlib_metadata=1.3.0=py36_0
  • intel-openmp=2019.4=243
  • ipykernel=5.1.3=py36h39e3cac_0
  • ipython=7.10.2=py36h39e3cac_0
  • ipython_genutils=0.2.0=py36_0
  • ipywidgets=7.5.1=py_0
  • jedi=0.15.1=py36_0
  • jinja2=2.10.3=py_0
  • jpeg=9b=h024ee3a_2
  • jsonschema=3.2.0=py36_0
  • jupyter=1.0.0=py36_7
  • jupyter_client=5.3.4=py36_0
  • jupyter_console=6.0.0=py36_0
  • jupyter_core=4.6.1=py36_0
  • kiwisolver=1.1.0=py36he6710b0_0
  • libboost=1.67.0=h46d08c1_4
  • libedit=3.1.20181209=hc058e9b_0
  • libevent=2.1.8=h1ba5d50_0
  • libffi=3.2.1=hd88cf55_4
  • libgcc-ng=9.1.0=hdf63c60_0
  • libgfortran-ng=7.3.0=hdf63c60_0
  • libpng=1.6.37=hbc83047_0
  • libprotobuf=3.6.0=hdbcaa40_0
  • libsodium=1.0.16=h1bed415_0
  • libstdcxx-ng=9.1.0=hdf63c60_0
  • libuuid=1.0.3=h1bed415_2
  • libxcb=1.13=h1bed415_1
  • libxml2=2.9.9=hea5a465_1
  • lz4-c=1.8.1.2=h14c3975_0
  • markupsafe=1.1.1=py36h7b6447c_0
  • matplotlib=3.1.1=py36h5429711_0
  • mistune=0.8.4=py36h7b6447c_0
  • mkl=2019.4=243
  • mkl-service=2.3.0=py36he904b0f_0
  • mkl_fft=1.0.15=py36ha843d7b_0
  • mkl_random=1.1.0=py36hd6b4f25_0
  • more-itertools=7.2.0=py36_0
  • nb_conda=2.2.1=py36_0
  • nb_conda_kernels=2.2.2=py36_0
  • nbconvert=5.6.1=py36_0
  • nbformat=4.4.0=py36_0
  • ncurses=6.1=he6710b0_1
  • notebook=6.0.2=py36_0
  • numpy=1.17.4=py36hc1035e2_0
  • numpy-base=1.17.4=py36hde5b4d6_0
  • openssl=1.1.1d=h516909a_0
  • pandas=0.25.3=py36he6710b0_0
  • pandoc=2.2.3.2=0
  • pandocfilters=1.4.2=py36_1
  • papermill=1.2.1=py36_0
  • parso=0.5.2=py_0
  • patsy=0.5.1=py36_0
  • pcre=8.43=he6710b0_0
  • pexpect=4.7.0=py36_0
  • pickleshare=0.7.5=py36_0
  • pip=19.3.1=py36_0
  • plotly=4.3.0=py_0
  • plotly_express=0.4.1=py_0
  • prometheus_client=0.7.1=py_0
  • prompt_toolkit=2.0.9=py36_0
  • ptyprocess=0.6.0=py36_0
  • pyaml=19.4.1=py_0
  • pyarrow=0.13.0=py36he6710b0_0
  • pycparser=2.19=py36_0
  • pygments=2.5.2=py_0
  • pyopenssl=19.1.0=py36_0
  • pyparsing=2.4.5=py_0
  • pyqt=5.9.2=py36h05f1152_2
  • pyrsistent=0.15.6=py36h7b6447c_0
  • pysocks=1.7.1=py36_0
  • python=3.6.9=h265db76_0
  • python-dateutil=2.8.1=py_0
  • pytz=2019.3=py_0
  • pyyaml=5.2=py36h7b6447c_0
  • pyzmq=18.1.0=py36he6710b0_0
  • qt=5.9.7=h5867ecd_1
  • qtconsole=4.6.0=py_0
  • re2=2019.08.01=he6710b0_0
  • readline=7.0=h7b6447c_5
  • requests=2.22.0=py36_1
  • retrying=1.3.3=py36_2
  • scipy=1.3.2=py36h7c811a0_0
  • seaborn=0.9.0=pyh91ea838_1
  • send2trash=1.5.0=py36_0
  • setuptools=42.0.2=py36_0
  • sip=4.19.8=py36hf484d3e_0
  • six=1.13.0=py36_0
  • snappy=1.1.7=hbae5bb6_3
  • sqlite=3.30.1=h7b6447c_0
  • statsmodels=0.10.1=py36hdd07704_0
  • tenacity=6.0.0=py36_0
  • terminado=0.8.3=py36_0
  • testpath=0.4.4=py_0
  • textwrap3=0.9.2=py_0
  • thrift-cpp=0.11.0=h02b749d_3
  • tk=8.6.8=hbc83047_0
  • tornado=6.0.3=py36h7b6447c_0
  • tqdm=4.40.2=py_0
  • traitlets=4.3.3=py36_0
  • urllib3=1.25.7=py36_0
  • wcwidth=0.1.7=py36_0
  • webencodings=0.5.1=py36_1
  • wheel=0.33.6=py36_0
  • widgetsnbextension=3.5.1=py36_0
  • xz=5.2.4=h14c3975_4
  • yaml=0.1.7=had09818_2
  • zeromq=4.3.1=he6710b0_3
  • zipp=0.6.0=py_0
  • zlib=1.2.11=h7b6447c_3
  • zstd=1.3.7=h0b5b093_0
  • {'pip': ['appdirs==1.4.3', 'configargparse==0.15.2', 'datrie==0.8', 'docutils==0.15.2', 'gitdb2==2.0.6', 'gitpython==3.0.5', 'psutil==5.6.7', 'ratelimiter==1.2.0.post0', 'smmap2==2.0.5', 'snakemake==5.8.2', 'wrapt==1.11.2']}
1
jupyter nbconvert --to html {input}
check_utilR 1
  • testlog/check_utilR.txt
1
Rscript -e 'sink("{output}")' -e 'devtools::check("./utilR")' -e 'sink()'
readme 1
  • docs/rst/readme.rst
1
pandoc {input} --from markdown --to rst -s -o {output}
index_rst 1
  • docs/index.rst
1
pandoc {input} --from markdown --to rst -s -o {output}
load_dataset 1
  • feather/data.feather
  • _libgcc_mutex=0.1=main
  • ansiwrap=0.8.4=py_0
  • arrow-cpp=0.13.0=py36h117bdfb_0
  • asn1crypto=1.2.0=py36_0
  • attrs=19.3.0=py_0
  • backcall=0.1.0=py36_0
  • backports=1.0=py_2
  • backports.tempfile=1.0=py_1
  • backports.weakref=1.0.post1=py_1
  • blas=1.0=mkl
  • bleach=3.1.0=py36_0
  • boost-cpp=1.67.0=h14c3975_4
  • brotli=1.0.7=he6710b0_0
  • bzip2=1.0.8=h7b6447c_0
  • ca-certificates=2019.11.28=hecc5488_0
  • certifi=2019.11.28=py36_0
  • cffi=1.13.2=py36h2e261b9_0
  • chardet=3.0.4=py36_1003
  • click=7.0=py36_0
  • cryptography=2.8=py36h1ba5d50_0
  • cycler=0.10.0=py36_0
  • dbus=1.13.12=h746ee38_0
  • decorator=4.4.1=py_0
  • defusedxml=0.6.0=py_0
  • double-conversion=3.1.5=he6710b0_1
  • entrypoints=0.3=py36_0
  • expat=2.2.6=he6710b0_0
  • feather-format=0.4.0=py_1003
  • fontconfig=2.13.0=h9420a91_0
  • freetype=2.9.1=h8a8886c_1
  • future=0.18.2=py36_0
  • gflags=2.2.2=he6710b0_0
  • glib=2.63.1=h5a9c865_0
  • glog=0.4.0=he6710b0_0
  • gmp=6.1.2=h6c8ec71_1
  • gst-plugins-base=1.14.0=hbbd80ab_1
  • gstreamer=1.14.0=hb453b48_1
  • icu=58.2=h9c2bf20_1
  • idna=2.8=py36_0
  • importlib_metadata=1.3.0=py36_0
  • intel-openmp=2019.4=243
  • ipykernel=5.1.3=py36h39e3cac_0
  • ipython=7.10.2=py36h39e3cac_0
  • ipython_genutils=0.2.0=py36_0
  • ipywidgets=7.5.1=py_0
  • jedi=0.15.1=py36_0
  • jinja2=2.10.3=py_0
  • jpeg=9b=h024ee3a_2
  • jsonschema=3.2.0=py36_0
  • jupyter=1.0.0=py36_7
  • jupyter_client=5.3.4=py36_0
  • jupyter_console=6.0.0=py36_0
  • jupyter_core=4.6.1=py36_0
  • kiwisolver=1.1.0=py36he6710b0_0
  • libboost=1.67.0=h46d08c1_4
  • libedit=3.1.20181209=hc058e9b_0
  • libevent=2.1.8=h1ba5d50_0
  • libffi=3.2.1=hd88cf55_4
  • libgcc-ng=9.1.0=hdf63c60_0
  • libgfortran-ng=7.3.0=hdf63c60_0
  • libpng=1.6.37=hbc83047_0
  • libprotobuf=3.6.0=hdbcaa40_0
  • libsodium=1.0.16=h1bed415_0
  • libstdcxx-ng=9.1.0=hdf63c60_0
  • libuuid=1.0.3=h1bed415_2
  • libxcb=1.13=h1bed415_1
  • libxml2=2.9.9=hea5a465_1
  • lz4-c=1.8.1.2=h14c3975_0
  • markupsafe=1.1.1=py36h7b6447c_0
  • matplotlib=3.1.1=py36h5429711_0
  • mistune=0.8.4=py36h7b6447c_0
  • mkl=2019.4=243
  • mkl-service=2.3.0=py36he904b0f_0
  • mkl_fft=1.0.15=py36ha843d7b_0
  • mkl_random=1.1.0=py36hd6b4f25_0
  • more-itertools=7.2.0=py36_0
  • nb_conda=2.2.1=py36_0
  • nb_conda_kernels=2.2.2=py36_0
  • nbconvert=5.6.1=py36_0
  • nbformat=4.4.0=py36_0
  • ncurses=6.1=he6710b0_1
  • notebook=6.0.2=py36_0
  • numpy=1.17.4=py36hc1035e2_0
  • numpy-base=1.17.4=py36hde5b4d6_0
  • openssl=1.1.1d=h516909a_0
  • pandas=0.25.3=py36he6710b0_0
  • pandoc=2.2.3.2=0
  • pandocfilters=1.4.2=py36_1
  • papermill=1.2.1=py36_0
  • parso=0.5.2=py_0
  • patsy=0.5.1=py36_0
  • pcre=8.43=he6710b0_0
  • pexpect=4.7.0=py36_0
  • pickleshare=0.7.5=py36_0
  • pip=19.3.1=py36_0
  • plotly=4.3.0=py_0
  • plotly_express=0.4.1=py_0
  • prometheus_client=0.7.1=py_0
  • prompt_toolkit=2.0.9=py36_0
  • ptyprocess=0.6.0=py36_0
  • pyaml=19.4.1=py_0
  • pyarrow=0.13.0=py36he6710b0_0
  • pycparser=2.19=py36_0
  • pygments=2.5.2=py_0
  • pyopenssl=19.1.0=py36_0
  • pyparsing=2.4.5=py_0
  • pyqt=5.9.2=py36h05f1152_2
  • pyrsistent=0.15.6=py36h7b6447c_0
  • pysocks=1.7.1=py36_0
  • python=3.6.9=h265db76_0
  • python-dateutil=2.8.1=py_0
  • pytz=2019.3=py_0
  • pyyaml=5.2=py36h7b6447c_0
  • pyzmq=18.1.0=py36he6710b0_0
  • qt=5.9.7=h5867ecd_1
  • qtconsole=4.6.0=py_0
  • re2=2019.08.01=he6710b0_0
  • readline=7.0=h7b6447c_5
  • requests=2.22.0=py36_1
  • retrying=1.3.3=py36_2
  • scipy=1.3.2=py36h7c811a0_0
  • seaborn=0.9.0=pyh91ea838_1
  • send2trash=1.5.0=py36_0
  • setuptools=42.0.2=py36_0
  • sip=4.19.8=py36hf484d3e_0
  • six=1.13.0=py36_0
  • snappy=1.1.7=hbae5bb6_3
  • sqlite=3.30.1=h7b6447c_0
  • statsmodels=0.10.1=py36hdd07704_0
  • tenacity=6.0.0=py36_0
  • terminado=0.8.3=py36_0
  • testpath=0.4.4=py_0
  • textwrap3=0.9.2=py_0
  • thrift-cpp=0.11.0=h02b749d_3
  • tk=8.6.8=hbc83047_0
  • tornado=6.0.3=py36h7b6447c_0
  • tqdm=4.40.2=py_0
  • traitlets=4.3.3=py36_0
  • urllib3=1.25.7=py36_0
  • wcwidth=0.1.7=py36_0
  • webencodings=0.5.1=py36_1
  • wheel=0.33.6=py36_0
  • widgetsnbextension=3.5.1=py36_0
  • xz=5.2.4=h14c3975_4
  • yaml=0.1.7=had09818_2
  • zeromq=4.3.1=he6710b0_3
  • zipp=0.6.0=py_0
  • zlib=1.2.11=h7b6447c_3
  • zstd=1.3.7=h0b5b093_0
  • {'pip': ['appdirs==1.4.3', 'configargparse==0.15.2', 'datrie==0.8', 'docutils==0.15.2', 'gitdb2==2.0.6', 'gitpython==3.0.5', 'psutil==5.6.7', 'ratelimiter==1.2.0.post0', 'smmap2==2.0.5', 'snakemake==5.8.2', 'wrapt==1.11.2']}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import seaborn as sns
import pandas as pd

params = snakemake.config

df = sns.load_dataset(params['dataset'])

df.to_feather(snakemake.output[0])

print('load finished')
plot_execute_nb_plot 1
  • docs/html/plot3.ipynb
  • _libgcc_mutex=0.1=main
  • ansiwrap=0.8.4=py_0
  • arrow-cpp=0.13.0=py36h117bdfb_0
  • asn1crypto=1.2.0=py36_0
  • attrs=19.3.0=py_0
  • backcall=0.1.0=py36_0
  • backports=1.0=py_2
  • backports.tempfile=1.0=py_1
  • backports.weakref=1.0.post1=py_1
  • blas=1.0=mkl
  • bleach=3.1.0=py36_0
  • boost-cpp=1.67.0=h14c3975_4
  • brotli=1.0.7=he6710b0_0
  • bzip2=1.0.8=h7b6447c_0
  • ca-certificates=2019.11.28=hecc5488_0
  • certifi=2019.11.28=py36_0
  • cffi=1.13.2=py36h2e261b9_0
  • chardet=3.0.4=py36_1003
  • click=7.0=py36_0
  • cryptography=2.8=py36h1ba5d50_0
  • cycler=0.10.0=py36_0
  • dbus=1.13.12=h746ee38_0
  • decorator=4.4.1=py_0
  • defusedxml=0.6.0=py_0
  • double-conversion=3.1.5=he6710b0_1
  • entrypoints=0.3=py36_0
  • expat=2.2.6=he6710b0_0
  • feather-format=0.4.0=py_1003
  • fontconfig=2.13.0=h9420a91_0
  • freetype=2.9.1=h8a8886c_1
  • future=0.18.2=py36_0
  • gflags=2.2.2=he6710b0_0
  • glib=2.63.1=h5a9c865_0
  • glog=0.4.0=he6710b0_0
  • gmp=6.1.2=h6c8ec71_1
  • gst-plugins-base=1.14.0=hbbd80ab_1
  • gstreamer=1.14.0=hb453b48_1
  • icu=58.2=h9c2bf20_1
  • idna=2.8=py36_0
  • importlib_metadata=1.3.0=py36_0
  • intel-openmp=2019.4=243
  • ipykernel=5.1.3=py36h39e3cac_0
  • ipython=7.10.2=py36h39e3cac_0
  • ipython_genutils=0.2.0=py36_0
  • ipywidgets=7.5.1=py_0
  • jedi=0.15.1=py36_0
  • jinja2=2.10.3=py_0
  • jpeg=9b=h024ee3a_2
  • jsonschema=3.2.0=py36_0
  • jupyter=1.0.0=py36_7
  • jupyter_client=5.3.4=py36_0
  • jupyter_console=6.0.0=py36_0
  • jupyter_core=4.6.1=py36_0
  • kiwisolver=1.1.0=py36he6710b0_0
  • libboost=1.67.0=h46d08c1_4
  • libedit=3.1.20181209=hc058e9b_0
  • libevent=2.1.8=h1ba5d50_0
  • libffi=3.2.1=hd88cf55_4
  • libgcc-ng=9.1.0=hdf63c60_0
  • libgfortran-ng=7.3.0=hdf63c60_0
  • libpng=1.6.37=hbc83047_0
  • libprotobuf=3.6.0=hdbcaa40_0
  • libsodium=1.0.16=h1bed415_0
  • libstdcxx-ng=9.1.0=hdf63c60_0
  • libuuid=1.0.3=h1bed415_2
  • libxcb=1.13=h1bed415_1
  • libxml2=2.9.9=hea5a465_1
  • lz4-c=1.8.1.2=h14c3975_0
  • markupsafe=1.1.1=py36h7b6447c_0
  • matplotlib=3.1.1=py36h5429711_0
  • mistune=0.8.4=py36h7b6447c_0
  • mkl=2019.4=243
  • mkl-service=2.3.0=py36he904b0f_0
  • mkl_fft=1.0.15=py36ha843d7b_0
  • mkl_random=1.1.0=py36hd6b4f25_0
  • more-itertools=7.2.0=py36_0
  • nb_conda=2.2.1=py36_0
  • nb_conda_kernels=2.2.2=py36_0
  • nbconvert=5.6.1=py36_0
  • nbformat=4.4.0=py36_0
  • ncurses=6.1=he6710b0_1
  • notebook=6.0.2=py36_0
  • numpy=1.17.4=py36hc1035e2_0
  • numpy-base=1.17.4=py36hde5b4d6_0
  • openssl=1.1.1d=h516909a_0
  • pandas=0.25.3=py36he6710b0_0
  • pandoc=2.2.3.2=0
  • pandocfilters=1.4.2=py36_1
  • papermill=1.2.1=py36_0
  • parso=0.5.2=py_0
  • patsy=0.5.1=py36_0
  • pcre=8.43=he6710b0_0
  • pexpect=4.7.0=py36_0
  • pickleshare=0.7.5=py36_0
  • pip=19.3.1=py36_0
  • plotly=4.3.0=py_0
  • plotly_express=0.4.1=py_0
  • prometheus_client=0.7.1=py_0
  • prompt_toolkit=2.0.9=py36_0
  • ptyprocess=0.6.0=py36_0
  • pyaml=19.4.1=py_0
  • pyarrow=0.13.0=py36he6710b0_0
  • pycparser=2.19=py36_0
  • pygments=2.5.2=py_0
  • pyopenssl=19.1.0=py36_0
  • pyparsing=2.4.5=py_0
  • pyqt=5.9.2=py36h05f1152_2
  • pyrsistent=0.15.6=py36h7b6447c_0
  • pysocks=1.7.1=py36_0
  • python=3.6.9=h265db76_0
  • python-dateutil=2.8.1=py_0
  • pytz=2019.3=py_0
  • pyyaml=5.2=py36h7b6447c_0
  • pyzmq=18.1.0=py36he6710b0_0
  • qt=5.9.7=h5867ecd_1
  • qtconsole=4.6.0=py_0
  • re2=2019.08.01=he6710b0_0
  • readline=7.0=h7b6447c_5
  • requests=2.22.0=py36_1
  • retrying=1.3.3=py36_2
  • scipy=1.3.2=py36h7c811a0_0
  • seaborn=0.9.0=pyh91ea838_1
  • send2trash=1.5.0=py36_0
  • setuptools=42.0.2=py36_0
  • sip=4.19.8=py36hf484d3e_0
  • six=1.13.0=py36_0
  • snappy=1.1.7=hbae5bb6_3
  • sqlite=3.30.1=h7b6447c_0
  • statsmodels=0.10.1=py36hdd07704_0
  • tenacity=6.0.0=py36_0
  • terminado=0.8.3=py36_0
  • testpath=0.4.4=py_0
  • textwrap3=0.9.2=py_0
  • thrift-cpp=0.11.0=h02b749d_3
  • tk=8.6.8=hbc83047_0
  • tornado=6.0.3=py36h7b6447c_0
  • tqdm=4.40.2=py_0
  • traitlets=4.3.3=py36_0
  • urllib3=1.25.7=py36_0
  • wcwidth=0.1.7=py36_0
  • webencodings=0.5.1=py36_1
  • wheel=0.33.6=py36_0
  • widgetsnbextension=3.5.1=py36_0
  • xz=5.2.4=h14c3975_4
  • yaml=0.1.7=had09818_2
  • zeromq=4.3.1=he6710b0_3
  • zipp=0.6.0=py_0
  • zlib=1.2.11=h7b6447c_3
  • zstd=1.3.7=h0b5b093_0
  • {'pip': ['appdirs==1.4.3', 'configargparse==0.15.2', 'datrie==0.8', 'docutils==0.15.2', 'gitdb2==2.0.6', 'gitpython==3.0.5', 'psutil==5.6.7', 'ratelimiter==1.2.0.post0', 'smmap2==2.0.5', 'snakemake==5.8.2', 'wrapt==1.11.2']}
1
2
3
4
5
6
7
8
import papermill as pm

# Run Parametrized Notebook

pm.execute_notebook(  snakemake.input[0]
                    , snakemake.output[0]
                    , parameters = dict( input = snakemake.input[1:]
                                        , config = snakemake.config) )
test_utilR 1
  • testlog/test_utilR.txt
1
Rscript -e 'sink("{output}")' -e 'devtools::test("./utilR")' -e 'sink()'
index_md 1
  • docs/index.md
source